/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：RootModel.js<br>
 * 日期：2016年9月19日<br>
 * 作者: 王志远<br>
 * 功能：组合模型<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 类型名称：Rainier.UI.V2.RootModel<br>
 * 类型功能：组合模型<br>
 */
Rainier.UI.V2.RootModel = Rainier.UI.V2.CompositeModel.extend({
	
	NAME : "Rainier.UI.V2.RootModel",
	
	/**
	 * 函数名称：Rainier.UI.V2.RootModel.init<br>
	 * 函数功能：构造函数<br>
	 * 参数输入:property属性对象<br>
	 */
	init : function(){
		this._super({});

		this.simResult = new Rainier.UI.V2.SimResult();
	},

	/**
	 * 函数名称：Rainier.UI.V2.CompositeModel.serializeToJson<br>
	 * 函数功能：将对象串行化为Json对象<br>
	 * 函数返回：json对象<br>
	 * 异常信息：无<br>
	 */
	serializeToJson : function(){
		var json =  this._super();
		delete json.uiProperty;
		delete json.modelProperty;
		delete json.type;
		delete json.uuid;
		return json;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.RootModel.onPropertyChange<br>
	 * 函数功能：侦听模型事件信息<br>
	 * 参数输入：evt:PropertyChangeEvent<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    onPropertyChange : function(evt){
        var eventName = evt.getEventName();
        if(eventName === Rainier.UI.V2.WebSocket.EngineResultMsgHandler.WEB_SOCKET_ENGINE_RESULT){
        	
            var result  = evt.getNewValue();
                        
            if(result.startsWith("@@OutputStart@@")){
                this.simResult.clearPlot();
                this.simResult.parseHeadInfo(result);
            }
            else if(result.startsWith("DATA")){
                this.simResult.appendWsData(result);
            }
         //    result		= this.parseEngineResult(result);
        	// //TODO:修改动态元件(灯泡、虚拟仪器等)
        	// this.updateDynamicComponent(result);
        }
        else{
            this._super(evt);
        }
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.RootModel.updateDynamicComponent<br>
	 * 函数功能：更新动态元件<br>
	 * 参数输入：result : 解算数据<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	updateDynamicComponent : function(result){
		//TODO:查找并更新动态元件显示
		var children = this.getChildren();
		$.each(children,function(index,child){
			if(child instanceof Rainier.UI.V2.DynamicModel){
				child.changeState(result);
			}
		})
	},	
	
	/**
	 * 函数名称：Rainier.UI.V2.RootModel.parseEngineResult<br>
	 * 函数功能：根据engineresult返回数据格式进行解析<br>
	 * 参数输入：content ：String	<br>
	 * 			'VA[3,619]:[(vv1#branch,0,-0.000697265,0,0)|(V(1),0,0.697265,0,0)|(time,0,0.0061228,0,1)]'
	 * 参数输出：无<br>
	 * 函数返回：result:解析数据对象<br>
	 * 			{time:0.0062543,vv1#branch:-0.000697265,V(1):0.697265}等
	 * 异常信息：无<br>
	 */
	parseEngineResult : function(content){
		var contentArr 	= [];
		var result		= {};
		
		var beginIndex 	= content.indexOf('[');
		var endIndex   	= content.indexOf(']');
		if(beginIndex >= 0){
			var strIndex = content.substr(beginIndex+1,endIndex-beginIndex-1);
			var indexArr = strIndex.split(',');
			if(indexArr.length > 1){
				strIndex = indexArr[1];
				result.index = parseInt(strIndex);
			}
		}
		
		beginIndex 	= content.indexOf(':[');
		if(beginIndex >= 0){
			endIndex    = content.indexOf(']',beginIndex);
			var contentStr = content.substr(beginIndex+2,endIndex-beginIndex-2);
			contentArr = contentStr.split('|');
			$.each(contentArr,function(index,singleStr){
				beginIndex 	= singleStr.indexOf('(');
				endIndex    = singleStr.lastIndexOf(')');
				var single 	= singleStr.substr(beginIndex+1,endIndex-beginIndex-1);
				var singleArr = single.split(',');
				var key  = singleArr[0];
				key 	 = key.replace(/#branch/,'');
				var value  = singleArr[2];
				if(key){
					result[key] = value;					
				}
				//console.log(key,value);
			})
		}
		return result;
	},
	
});